<?php
/**
 * Nweb Framework
 *
 * This script is protected by copyright. It's use, copying, modification
 * and distribution without written consent of the author is prohibited.
 *
 * @category    source
 * @package     pl.nweb.framework.registry
 * @author      Krzysztof Kardasz <krzysztof.kardasz@gmail.com>
 * @copyright   Copyright (c) 2011 Krzysztof Kardasz
 * @license     http://www.gnu.org/licenses/lgpl-3.0.txt  GNU Lesser General Public
 * @version     3.0 $Id$
 * @link        http://code.google.com/p/nweb-framework/
 * @link        http://framework.nweb.pl
 */

namespace pl\nweb\framework;

/**
 * Rejestr
 *
 * @category    source
 * @package     pl.nweb.framework.registry
 * @author      Krzysztof Kardasz <krzysztof.kardasz@gmail.com>
 * @copyright   Copyright (c) 2011 Krzysztof Kardasz
 * @version     3.0 $Id$
 */
class Registry
{
    /**
     * Dane rejestru
     *
     * @var array
     */
    private $_data = array();

    /**
     * Instancja obiektu
     *
     * @var array
     */
    private static $_instance  = array();

    /**
     * Zwraca instancję obiektu rejestru
     *
     * @param string $namespace przestrzeń nazw
     * @return \pl\nweb\framework\Registry
     */
    public static function getInstance ($namespace = 'default')
    {
        if(empty($namespace)) {
            $namespace = 'default';
        }
        if(!isset(self::$_instance[$namespace])) {
            self::$_instance[$namespace] = new self;
        }
        return self::$_instance[$namespace];
    }

    /**
     * Zwrócenie kolekcji danych
     *
     * @return array
     */
    public function toArray ()
    {
        return $this->_data;
    }

    /**
     * Definiuje wartość
     *
     * @param  string $name
     * @param  string $value
     * @return void
     */
    public function set ($name, $value)
    {
        $this->_data[$name] = $value;
    }

    /**
     * Zwraca wartość
     *
     * @param  string $name nazwa elementu
     * @param  mixed $default domyślna wartość
     * @return mixed
     */
    public function get ($name, $default = false)
    {
        return ($this->has($name)) ? $this->_data[$name] : $default;
    }

    /**
     * Zwraca flagę czy wartość istnieje
     *
     * @param  string $name
     * @return boolean
     */
    public function has ($name)
    {
        return array_key_exists($name, $this->_data);
    }
}